137 research outputs found
Web API Fragility: How Robust is Your Web API Client
Web APIs provide a systematic and extensible approach for
application-to-application interaction. A large number of mobile applications
makes use of web APIs to integrate services into apps. Each Web API's evolution
pace is determined by their respective developer and mobile application
developers are forced to accompany the API providers in their software
evolution tasks. In this paper we investigate whether mobile application
developers understand and how they deal with the added distress of web APIs
evolving. In particular, we studied how robust 48 high profile mobile
applications are when dealing with mutated web API responses. Additionally, we
interviewed three mobile application developers to better understand their
choices and trade-offs regarding web API integration.Comment: Technical repor
Basic block coverage for search-based unit testing and crash reproduction
Search-based techniques have been widely used for white-box test generation. Many of these approaches rely on the approach level and branch distance heuristics to guide the search process and generate test cases with high line and branch coverage. Despite the positive results achieved by these two heuristics, they only use the information related to the coverage of explicit branches (e.g., indicated by conditional and loop statements), but ignore potential implicit branchings within basic blocks of code. If such implicit branching happens at runtime (e.g., if an exception is thrown in a branchless-method), the existing fitness functions cannot guide the search process. To address this issue, we introduce a new secondary objective, called Basic Block Coverage (BBC), which takes into account the coverage level of relevant basic blocks in the control flow graph. We evaluated the impact of BBC on search-based unit test generation (using the DynaMOSA algorithm) and search-based crash reproduction (using the STDistance and WeightedSum fitness functions). Our results show that for unit test generation, BBC improves the branch coverage of the generated tests. Although small (∼ 1.5%), this improvement in the branch coverage is systematic and leads to an increase of the output domain coverage and implicit runtime exception coverage, and of the diversity of runtime states. In terms of crash reproduction, in the combination of STDistance and WeightedSum, BBC helps in reproducing 3 new crashes for each fitness function. BBC significantly decreases the time required to reproduce 43.5% and 45.1% of the crashes using STDistance and WeightedSum, respectively. For these crashes, BBC reduces the consumed time by 71.7% (for STDistance) and 68.7% (for WeightedSum) on average.Software Engineerin
Studying Late Propagations in Code Clone Evolution Using Software Repository Mining
In the code clone evolution community, the Late Propagation (LP) has been identified as one of the clone evolution patterns that can potentially lead to software defects. An LP occurs when instances of a clone pair are changed consistently, but not at the same time. The clone instance, which receives the update at a later time, might exhibit unintended behavior if the modification was a bugfix. In this paper, we present an approach to extract LPs from software repositories. Subsequently, we study LPs in four software systems, which allows us to investigate the propagation time, the clone dispersion and the effects of LPs on the software
Promises and Perils of Inferring Personality on GitHub
Personality plays a pivotal role in our understanding of human actions and
behavior. Today, the applications of personality are widespread, built on the
solutions from psychology to infer personality. In software engineering, for
instance, one widely used solution to infer personality uses textual
communication data. As studies on personality in software engineering continue
to grow, it is imperative to understand the performance of these solutions.
This paper compares the inferential ability of three widely studied text-based
personality tests against each other and the ground truth on GitHub. We explore
the challenges and potential solutions to improve the inferential ability of
personality tests. Our study shows that solutions for inferring personality are
far from being perfect. Software engineering communications data can infer
individual developer personality with an average error rate of 41%. In the best
case, the error rate can be reduced up to 36% by following our recommendations
Search-based crash reproduction using behavioural model seeding
Search-based crash reproduction approaches assist developers during debugging
by generating a test case which reproduces a crash given its stack trace. One
of the fundamental steps of this approach is creating objects needed to trigger
the crash. One way to overcome this limitation is seeding: using information
about the application during the search process. With seeding, the existing
usages of classes can be used in the search process to produce realistic
sequences of method calls which create the required objects. In this study, we
introduce behavioral model seeding: a new seeding method which learns class
usages from both the system under test and existing test cases. Learned usages
are then synthesized in a behavioral model (state machine). Then, this model
serves to guide the evolutionary process. To assess behavioral model-seeding,
we evaluate it against test-seeding (the state-of-the-art technique for seeding
realistic objects) and no-seeding (without seeding any class usage). For this
evaluation, we use a benchmark of 124 hard-to-reproduce crashes stemming from
six open-source projects. Our results indicate that behavioral model-seeding
outperforms both test seeding and no-seeding by a minimum of 6% without any
notable negative impact on efficiency
- …